home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qtmultilineedit.h.z / qtmultilineedit.h
C/C++ Source or Header  |  2002-04-08  |  11KB  |  365 lines

  1. /**********************************************************************
  2. ** $Id:  qt/qtmultilineedit.h   3.0.3   edited Oct 12 12:18 $
  3. **
  4. ** Definition of QtMultiLineEdit widget class
  5. **
  6. ** Created : 961005
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file contains a class moved out of the Qt GUI Toolkit API. It
  11. ** may be used, distributed and modified without limitation.
  12. **
  13. **********************************************************************/
  14.  
  15. #ifndef QTMULTILINEEDIT_H
  16. #define QTMULTILINEEDIT_H
  17.  
  18. #ifndef QT_H
  19. #include "qttableview.h"
  20. #include "qstring.h"
  21. #include "qptrlist.h"
  22. #endif // QT_H
  23.  
  24. #ifndef QT_NO_QTMULTILINEEDIT
  25.  
  26. struct QtMultiLineData;
  27. class QtMultiLineEditCommand;
  28. class QValidator;
  29.  
  30. class QtMultiLineEdit : public QtTableView
  31. {
  32.     Q_OBJECT
  33.     Q_ENUMS( EchoMode WordWrap WrapPolicy )
  34.     Q_PROPERTY( int numLines READ numLines )
  35.     Q_PROPERTY( bool atBeginning READ atBeginning )
  36.     Q_PROPERTY( bool atEnd READ atEnd )
  37.     Q_PROPERTY( int maxLineWidth READ maxLineWidth )
  38.     Q_PROPERTY( Alignment alignment READ alignment WRITE setAlignment )
  39.     Q_PROPERTY( bool edited READ edited WRITE setEdited DESIGNABLE false )
  40.     Q_PROPERTY( EchoMode echoMode READ echoMode WRITE setEchoMode )
  41.     Q_PROPERTY( int maxLength READ maxLength WRITE setMaxLength )
  42.     Q_PROPERTY( int maxLines READ maxLines WRITE setMaxLines )
  43.     Q_PROPERTY( int hMargin READ hMargin WRITE setHMargin )
  44.     Q_PROPERTY( WordWrap wordWrap READ wordWrap WRITE setWordWrap )
  45.     Q_PROPERTY( int wrapColumnOrWidth READ wrapColumnOrWidth WRITE setWrapColumnOrWidth )
  46.     Q_PROPERTY( WrapPolicy wrapPolicy READ wrapPolicy WRITE setWrapPolicy )
  47.     Q_PROPERTY( bool autoUpdate READ autoUpdate WRITE setAutoUpdate DESIGNABLE false )
  48.     Q_PROPERTY( bool undoEnabled READ isUndoEnabled WRITE setUndoEnabled )
  49.     Q_PROPERTY( int undoDepth READ undoDepth WRITE setUndoDepth )
  50.     Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
  51.     Q_PROPERTY( bool overWriteMode READ isOverwriteMode WRITE setOverwriteMode )
  52.     Q_PROPERTY( QString text READ text WRITE setText )
  53.     Q_PROPERTY( int length READ length )
  54.  
  55. public:
  56.     QtMultiLineEdit( QWidget *parent=0, const char *name=0 );
  57.    ~QtMultiLineEdit();
  58.  
  59.     QString textLine( int line ) const;
  60.     int numLines() const;
  61.  
  62.     QSize sizeHint() const;
  63.     QSize minimumSizeHint() const;
  64.     QSizePolicy sizePolicy() const;
  65.  
  66.     virtual void setFont( const QFont &font );
  67.  
  68.     virtual void insertLine( const QString &s, int line = -1 );
  69.     virtual void insertAt( const QString &s, int line, int col, bool mark = FALSE );
  70.     virtual void removeLine( int line );
  71.  
  72.     void cursorPosition( int *line, int *col ) const;
  73.     virtual void setCursorPosition( int line, int col, bool mark = FALSE );
  74.     void getCursorPosition( int *line, int *col ) const;
  75.     bool atBeginning() const;
  76.     bool atEnd() const;
  77.  
  78.     virtual void setFixedVisibleLines( int lines );
  79.  
  80.     int maxLineWidth() const;
  81.  
  82.     void setAlignment( int flags );
  83.     int alignment() const;
  84.  
  85.     virtual void setValidator( const QValidator * );
  86.     const QValidator * validator() const;
  87.  
  88.     void setEdited( bool );
  89.     bool edited() const;
  90.  
  91.     void cursorWordForward( bool mark );
  92.     void cursorWordBackward( bool mark );
  93.  
  94.     enum EchoMode { Normal, NoEcho, Password };
  95.     virtual void setEchoMode( EchoMode );
  96.     EchoMode echoMode() const;
  97.  
  98.     void setMaxLength(int);
  99.     int maxLength() const;
  100.     virtual void setMaxLineLength(int);
  101.     int maxLineLength() const;
  102.     virtual void setMaxLines(int);
  103.     int maxLines() const;
  104.     virtual void setHMargin(int);
  105.     int hMargin() const;
  106.  
  107.     virtual void setSelection( int row_from, int col_from, int row_to, int col_t );
  108.  
  109.     enum WordWrap {
  110.     NoWrap,
  111.     WidgetWidth,
  112.     FixedPixelWidth,
  113.     FixedColumnWidth
  114.     };
  115.     void setWordWrap( WordWrap mode );
  116.     WordWrap wordWrap() const;
  117.     void setWrapColumnOrWidth( int );
  118.     int wrapColumnOrWidth() const;
  119.  
  120.     enum WrapPolicy {
  121.     AtWhiteSpace,
  122.     Anywhere
  123.     };
  124.     void setWrapPolicy( WrapPolicy policy );
  125.     WrapPolicy wrapPolicy() const;
  126.  
  127.     bool autoUpdate()    const;
  128.     virtual void setAutoUpdate( bool );
  129.  
  130.     void setUndoEnabled( bool );
  131.     bool isUndoEnabled() const;
  132.     void setUndoDepth( int );
  133.     int undoDepth() const;
  134.  
  135.     bool isReadOnly() const;
  136.     bool isOverwriteMode() const;
  137.  
  138.     QString text() const;
  139.  
  140.     int length() const;
  141.  
  142.     static void setDefaultTabStop( int ex );
  143.     static int defaultTabStop();
  144. public slots:
  145.     virtual void       setText( const QString &);
  146.     virtual void       setReadOnly( bool );
  147.     virtual void       setOverwriteMode( bool );
  148.  
  149.     void       clear();
  150.     void       append( const QString &);
  151.     void       deselect();
  152.     void       selectAll();
  153. #ifndef QT_NO_CLIPBOARD
  154.     void       paste();
  155.     void       pasteSubType(const QCString& subtype);
  156.     void       copyText() const;
  157.     void       copy() const;
  158.     void       cut();
  159. #endif
  160.     void       insert( const QString& );
  161.     void       undo();
  162.     void       redo();
  163.  
  164. signals:
  165.     void    textChanged();
  166.     void    returnPressed();
  167.     void    undoAvailable( bool );
  168.     void    redoAvailable( bool );
  169.     void    copyAvailable( bool );
  170.  
  171. protected:
  172.     void    paintCell( QPainter *, int row, int col );
  173.     bool    event( QEvent * );
  174.  
  175.     void    mousePressEvent( QMouseEvent * );
  176.     void    mouseMoveEvent( QMouseEvent * );
  177.     void    mouseReleaseEvent( QMouseEvent * );
  178.     void    mouseDoubleClickEvent( QMouseEvent * );
  179.     void     wheelEvent( QWheelEvent * );
  180.     void    keyPressEvent( QKeyEvent * );
  181.     void    focusInEvent( QFocusEvent * );
  182.     void    focusOutEvent( QFocusEvent * );
  183.     void    timerEvent( QTimerEvent * );
  184.     void    leaveEvent( QEvent * );
  185.     void    resizeEvent( QResizeEvent * );
  186.  
  187.     bool    focusNextPrevChild( bool );
  188.  
  189. #ifndef QT_NO_DRAGANDDROP
  190.     void    dragMoveEvent( QDragMoveEvent* );
  191.     void    dragEnterEvent( QDragEnterEvent * );
  192.     void    dropEvent( QDropEvent* );
  193.     void    dragLeaveEvent( QDragLeaveEvent* );
  194. #endif
  195.  
  196.     bool    hasMarkedText() const;
  197.     QString    markedText() const;
  198.     int        textWidth( int );
  199.     int        textWidth( const QString &);
  200.  
  201.     QPoint    cursorPoint() const;
  202.  
  203. protected:
  204.     virtual void insert( const QString&, bool mark );
  205.     virtual void newLine();
  206.     virtual void killLine();
  207.     virtual void pageUp( bool mark=FALSE );
  208.     virtual void pageDown( bool mark=FALSE );
  209.     virtual void cursorLeft( bool mark=FALSE, bool wrap = TRUE );
  210.     virtual void cursorRight( bool mark=FALSE, bool wrap = TRUE );
  211.     virtual void cursorUp( bool mark=FALSE );
  212.     virtual void cursorDown( bool mark=FALSE );
  213.     virtual void backspace();
  214.     virtual void del();
  215.     virtual void home( bool mark=FALSE );
  216.     virtual void end( bool mark=FALSE );
  217.  
  218.     bool getMarkedRegion( int *line1, int *col1,
  219.               int *line2, int *col2 ) const;
  220.     int lineLength( int row ) const;
  221.     QString *getString( int row ) const;
  222.     bool isEndOfParagraph( int row ) const;
  223.     QString stringShown( int row ) const;
  224.  
  225. protected:
  226.     bool    cursorOn;
  227.     void    insertChar( QChar );
  228.  
  229. private slots:
  230.     void    clipboardChanged();
  231.     void    blinkTimerTimeout();
  232.     void    scrollTimerTimeout();
  233.     void    dndTimeout();
  234.  
  235. private:
  236. #ifndef QT_NO_MIME
  237.     QCString pickSpecial(QMimeSource* ms, bool always_ask, const QPoint&);
  238. #endif
  239. #ifndef QT_NO_MIMECLIPBOARD
  240.     void       pasteSpecial(const QPoint&);
  241. #endif
  242.     struct QtMultiLineEditRow {
  243.     QtMultiLineEditRow( QString string, int width, bool nl = TRUE )
  244.         :s(string), w(width), newline( nl )
  245.     {
  246.     };
  247.     QString s;
  248.     int w;
  249.     bool newline;
  250.     };
  251.     QPtrList<QtMultiLineEditRow> *contents;
  252.     QtMultiLineData *d;
  253.  
  254.     bool    readOnly;
  255.     bool    dummy;
  256.     bool    markIsOn;
  257.     bool    dragScrolling ;
  258.     bool    dragMarking;
  259.     bool    textDirty;
  260.     bool    wordMark;
  261.     bool    overWrite;
  262.  
  263.     int        cursorX;
  264.     int        cursorY;
  265.     int        markAnchorX;
  266.     int        markAnchorY;
  267.     int        markDragX;
  268.     int        markDragY;
  269.     int        curXPos;    // cell coord of cursor
  270.     int        blinkTimer; // #### not used anymore - remove in 3.0
  271.     int        scrollTimer; // #### not used anymore - remove in 3.0
  272.  
  273.     int        mapFromView( int xPos, int row );
  274.     int        mapToView( int xIndex, int row );
  275.  
  276.     void    pixelPosToCursorPos(QPoint p, int* x, int* y) const;
  277.     void    setCursorPixelPosition(QPoint p, bool clear_mark=TRUE);
  278.  
  279.     void    setWidth( int );
  280.     void    updateCellWidth();
  281.     bool     partiallyInvisible( int row );
  282.     void    makeVisible();
  283.     void    setBottomCell( int row );
  284.  
  285.     void     newMark( int posx, int posy, bool copy=TRUE );
  286.     void     markWord( int posx, int posy );
  287.     void    extendSelectionWord( int &newX, int&newY);
  288.     int     charClass( QChar );
  289.     void    turnMark( bool on );
  290.     bool    inMark( int posx, int posy ) const;
  291.     bool    beforeMark( int posx, int posy ) const;
  292.     bool    afterMark( int posx, int posy ) const;
  293.     int        setNumRowsAndTruncate();
  294.  
  295. #ifndef QT_NO_DRAGANDDROP
  296.     void    doDrag();
  297. #endif
  298.     void    startAutoScroll();
  299.     void    stopAutoScroll();
  300.  
  301.     void    cursorLeft( bool mark, bool clear_mark, bool wrap );
  302.     void    cursorRight( bool mark, bool clear_mark, bool wrap );
  303.     void    cursorUp( bool mark, bool clear_mark );
  304.     void    cursorDown( bool mark, bool clear_mark );
  305.  
  306.     void    wrapLine( int line, int removed = 0);
  307.     void    rebreakParagraph( int line, int removed = 0 );
  308.     void    rebreakAll();
  309.     void    insertAtAux( const QString &s, int line, int col, bool mark = FALSE );
  310.     void    killLineAux();
  311.     void    delAux();
  312.     int    positionToOffsetInternal( int row, int col ) const;
  313.     void    offsetToPositionInternal( int position, int *row, int *col ) const;
  314.     void    deleteNextChar( int offset, int row, int col );
  315.  
  316.     void addUndoCmd( QtMultiLineEditCommand* );
  317.     void addRedoCmd( QtMultiLineEditCommand* );
  318.     void processCmd( QtMultiLineEditCommand*, bool );
  319.  
  320. private:    // Disabled copy constructor and operator=
  321. #if defined(Q_DISABLE_COPY)
  322.     QtMultiLineEdit( const QtMultiLineEdit & );
  323.     QtMultiLineEdit &operator=( const QtMultiLineEdit & );
  324. #endif
  325. };
  326.  
  327. inline bool QtMultiLineEdit::isReadOnly() const { return readOnly; }
  328.  
  329. inline bool QtMultiLineEdit::isOverwriteMode() const { return overWrite; }
  330.  
  331. inline void QtMultiLineEdit::setOverwriteMode( bool on )
  332. {
  333.     overWrite = on;
  334.  }
  335.  
  336. inline int QtMultiLineEdit::lineLength( int row ) const
  337. {
  338.     return contents->at( row )->s.length();
  339. }
  340.  
  341. inline bool QtMultiLineEdit::atEnd() const
  342. {
  343.     return cursorY == (int)contents->count() - 1
  344.     && cursorX == lineLength( cursorY ) ;
  345. }
  346.  
  347. inline bool QtMultiLineEdit::atBeginning() const
  348. {
  349.     return cursorY == 0 && cursorX == 0;
  350. }
  351.  
  352. inline QString *QtMultiLineEdit::getString( int row ) const
  353. {
  354.     return &(contents->at( row )->s);
  355. }
  356.  
  357. inline int QtMultiLineEdit::numLines() const
  358. {
  359.     return contents->count();
  360. }
  361.  
  362. #endif // QT_NO_QTMULTILINEEDIT
  363.  
  364. #endif // QTMULTILINEDIT_H
  365.